package model;

import java.text.SimpleDateFormat;
import java.util.ArrayList;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Loja {
	
	private static Document config;
	public static Document relatorio;
	
	public static int QTD_VENDEDOR;
	public static int QTD_CAIXA;
	public static int QTD_COMPRADOR;
	public static int QTD_PRODUTO;
	public static int TEMPO_DE_FUNCIONAMENTO;
	public static int UNIDADE_DE_TEMPO;
	
	public static ArrayList<Produto> produtos = new ArrayList<Produto>();
	public static ArrayList<Vendedor> vendedores = new ArrayList<Vendedor>();
	public static ArrayList<Comprador> compradores = new ArrayList<Comprador>();
	public static ArrayList<Caixa> caixas = new ArrayList<Caixa>();
	public static SimpleDateFormat formato = new SimpleDateFormat("HH:mm:ss");
	
	private static Boolean funcionando = false;
	
	public static void iniciaExpediente(){
		Loja.funcionando = true;
		Loja.carregaConfiguracao();
		Loja.inicializaRecursos();
		new GeradorCliente(Loja.TEMPO_DE_FUNCIONAMENTO);
		(new GerenciaCompra()).start();
	}
	
	public static Boolean getFuncionando(){
		return funcionando;
	}
	
	public static void fechaExpediente(){
		while(true)
			if (Caixa.filaCliente.size() == 0 && 
				Vendedor.filaCircular.size() == Loja.QTD_VENDEDOR && 
				compradores.size() == Loja.QTD_COMPRADOR)
				break;
		funcionando = false;
		System.out.print("\nGerando Relatorio...");
		GeradorRelatorio.geraProdutividadeVendedor();
		GeradorRelatorio.geraHistorico();
		Biblioteca.salvaDocumentoXML(Loja.relatorio, "arquivos//relatorio.html");
		System.out.println("OK!");
	}
	
	private static void carregaConfiguracao(){
		try {
			Loja.config = Biblioteca.criaDocumentoXML("config//confLoja.xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		NodeList nl = Loja.config.getDocumentElement().getChildNodes();
		
		for(int i = 0; i < nl.getLength() ; i++ ){
			Node nd = nl.item(i);
			
			if(nd.getNodeType() == Node.ELEMENT_NODE){
				Element el = (Element) nd;
				
				if(el.getNodeName().equals("qtdVendedor"))
					QTD_VENDEDOR = Integer.parseInt(el.getTextContent());
				else if(el.getNodeName().equals("qtdCaixa"))
					QTD_CAIXA = Integer.parseInt(el.getTextContent());
				else if(el.getNodeName().equals("qtdComprador"))
					QTD_COMPRADOR = Integer.parseInt(el.getTextContent());
				else if(el.getNodeName().equals("qtdProduto"))
					QTD_PRODUTO = Integer.parseInt(el.getTextContent());
				else if(el.getNodeName().equals("unidadeTempo"))
					UNIDADE_DE_TEMPO = Integer.parseInt(el.getTextContent());				
				else if(el.getNodeName().equals("tempoFuncionamento"))
					TEMPO_DE_FUNCIONAMENTO = Integer.parseInt(el.getTextContent());				
			}
		}
	}
	
	private static void inicializaRecursos(){
		for (int i = 1;i<=Loja.QTD_VENDEDOR;i++)
			Loja.vendedores.add(new Vendedor("v" + i, Biblioteca.geraRandom(10, 20) * Loja.UNIDADE_DE_TEMPO));
		
		for (int i = 1;i<=Loja.QTD_PRODUTO;i++)
			Loja.produtos.add(new Produto(i, Biblioteca.geraRandom(20, 30)));
		
		for (int i = 1;i<=Loja.QTD_COMPRADOR;i++)
			Loja.compradores.add(new Comprador("co" + i));
		
		for (int i = 1;i<=Loja.QTD_CAIXA;i++)
			Loja.caixas.add(new Caixa("ca" + i, Biblioteca.geraRandom(5, 10) * Loja.UNIDADE_DE_TEMPO));
	}
	
}
